查看原文
其他

【数据蒋堂】第42期:RDB与NoSQL的访问性能

2018-02-12 蒋步星 数据蒋堂

我们继续从软件角度上看外存数据源的性能,来考察数据库的性能特点,在这篇文章中,我们只关心数据的访问性能,而不涉及计算性能。

关系数据库

关系数据库也是很常见的数据存储方式。本质上讲,数据库其实也是一种特殊的二进制文件,但它的性能会弱于直接写在操作系统下的文件,主要原因在于数据库通常都要提供数据更新的能力,这就会产生影响性能的因素:

1. 紧凑性与压缩手段

数据库要考虑数据的更新,一般会采用段页式的分块存储,在存储数据时不会把分块完全填满,而会留一小部分空白区用于后续的修改动作。这样,占用的硬盘空间就会比不考虑更新动作的文件更大一点。

因为要更新数据,也很难实现数据压缩。比如上一篇所说的把小整数存成较短字节的方案,如果采用了这种方案,一旦这个小整数被改成了大整数,原来的空间就存不下了,就要把后续数据都向后移动,这会使数据更新成本过高,所以一般数据库都不采用压缩手段,而直接根据数据类型分配空间,也会造成空间的浪费,极端情况会出现占用空间大于文本的现象。

2. 事务一致性带来的复杂性

许多商业数据库还会同时支持OLTP业务,在读取数据时要提供一致性的能力,这会使访问数据的动作复杂度变大很多。同一条数据,由于其它事务的写操作,可能出现多个备份,在读取时数据库要根据事务的启动时刻找到正确的那一个,这是个非常麻烦的动作,对性能影响很大。

另外,前面文章还提到过,按块存储的结构对于分段也不够自由,不象文件那样可以实施更灵活的并行手段,也会导致数据库的性能表现弱于直接 文件。

数据库普遍还有一个IO性能不佳的问题,数据在数据库中运算时性能尚可,但要通过数据库接口取出来就非常慢,实测的情况表明,这个性能经常可能会比用文本存储还慢。对于这个问题,在数据库本身负担不重时,可以采用并行取数的方法来解决,具体细节及代码我们将在以后再详述。

NoSQL数据库

NoSQL常常被用作大数据处理,但是,它真地能获得高性能吗?

这要分情况,看进行什么样的处理。

NoSQL产品一般都不提供事务一致性的能力,这是在数据访问时的动作要比关系数据库简单了许多,不需要考虑回滚段、多备份等问题。而且,放弃事务的NoSQL一般也更容易横向扩展,使用更多机器来承载更大的业务量。在这方面,NoSQL确实会有更高的性能,特别是高并发写入时的优势要比关系数据库大得多。

不过,对于单纯的分析型业务,却不完全是这样。

许多分析型关系数据库也不考虑事务一致性的问题,访问动作同样也较为简单。NoSQL不处理事务一致性带来的性能优势,与这些分析型数据库比并没有特别的地方。

NoSQL产品常常使用Key-Value型存储组织,Value的随意性会带来结构多样性的好处,即使用NoSQL存储数据时不需要事先确定数据结构,不象关系数据库那样必须先建个有特定数据结构的表才能使用,这是NoSQL非常方便的地方。

但是,多样性和高性能是一对天生的矛盾!

多样性意味着每条记录的数据结构都可能不一样。在存储数据时同时也要存储结构,增大了存储量,在解析数据时也要去匹配数据结构中的字段,增加大了复杂度。而关系数据库中同一表的数据结构是确定且相同的,结构只要存储一份,解析数据时的字段对应也非常简单,当数据量很大时,这个优势就会非常明显。

大多数Key-Value式的NoSQL产品,只是在用Key寻找Values时性能很好(这只要有个Hash索引就能够用Key找到对应的记录,关系数据库建了索引也可以),但面临需要对数据遍历才能完成的计算时(比如过滤条件不是针对Key的),它的性能就会远远低于确定数据结构的关系数据库。把NoSQL用于高性能大数据分析业务是个错误的选择,但现实中却经常有人在这么用。

  正文结束  


 近期文章

【数据蒋堂】第41期:文件的性能分析

【数据蒋堂】第40期:倍增分段技术

【数据蒋堂】第39期:数据分段讨论

【数据蒋堂】第38期:JOIN延伸 - 维度其它应用

【数据蒋堂】第37期:JOIN延伸 - 维度查询语法

【数据蒋堂】第36期:JOIN延伸 - 维度概念

【数据蒋堂】第35期:JOIN提速 - 有序归并

【数据蒋堂】第34期:JOIN提速 - 外键指针的衍生

【数据蒋堂】第33期:JOIN提速 - 外键指针化

【数据蒋堂】第32期:JOIN简化 - 意义总结

【数据蒋堂】第31期:JOIN简化 - 维度对齐

【数据蒋堂】第30期:JOIN简化 - 消除关联

【数据蒋堂】第29期:JOIN运算剖析


    关于数据蒋堂    

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。


蒋步星,清华大学计算机硕士,著有《非线性报表模型原理》等

1989年中国国际奥林匹克数学竞赛团体冠军成员,个人金牌

2000年创立润乾公司,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准。

2008年开始研发不依赖关系型数据的计算引擎,历经多个版本后,于2014年集算器正式发布。有效地提高了复杂结构化大数据计算的开发速度和运算效率。

2016年荣获中国电子信息产业发展研究院评选的“2016年中国软件和信息服务业 • 十大领军人物”。

2017年创办数据领域技术讲堂《数据蒋堂》,专注数据、每周一期。

2017年获得中国大数据产业生态大会评选的“2017年度中国数据大工匠”

2017年荣获中国电子信息产业发展研究院评选的“2017年中国软件和信息服务业 • 十大领军人物”。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存